package ist.swt.snippet.menu;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;

public class SnippetMenu {

	Display display = null;
	Shell shell = null;	 
	
	public static void main(String[] args) {
		(new SnippetMenu()).execute();
	}	
	public SnippetMenu() {
		super();
		initialize();
		initializeMenu();
	}
	
	
	
	
	
	/**
	 * Este método privado inicializa el MenuBar
	 */
	private void initializeMenu() 
	{
		/*
		 * Menu
		 * Estilos posibles: SWT.DROP_DOWN, SWT.POPUP Y SWT.BAR
		 */
		Menu menu = new Menu(shell, SWT.BAR);
		shell.setMenuBar(menu);
		
		
		/*
		 * MenuItem
		 * Estilos posibles SWT.CASCADE, SWT.PUSH, SWT.SEPARATOR, SWT.CHECK, SWT.RADIO
		 */
		MenuItem menuItem_File = new MenuItem(menu, SWT.CASCADE);
		menuItem_File.setText("&File");
		
		
		
		/*
		 * Es necesario crear otro objeto Menu que contendrá los objetos MenuItem
		 */
		Menu menu_File = new Menu(shell, SWT.DROP_DOWN);
		
		MenuItem menuItem_Abrir = new MenuItem(menu_File, SWT.PUSH);
		menuItem_Abrir.setText("Abrir");
		
		MenuItem menuItem_Guardar = new MenuItem(menu_File, SWT.PUSH);
		menuItem_Guardar.setText("Guardar");
		
		MenuItem menuFileItemSeparator = new MenuItem(menu_File, SWT.SEPARATOR);
		
		

		MenuItem menuItem_opcion_Check = new MenuItem(menu_File, SWT.CHECK);
		menuItem_opcion_Check.setText("opcion check");
		menuItem_opcion_Check.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				
			//System.out.println(menuItem_opcion_Check.getSelection());
			System.out.println(
					((MenuItem)e.getSource()).getSelection()
					);	
			}
		});
		
		
		
		MenuItem menuFileItemOpciones = new MenuItem(menu_File, SWT.CASCADE);
		menuFileItemOpciones.setText("Opciones");
		
		
		
		
		Menu mOpciones = new Menu(menuFileItemOpciones);
		
		/**
		 * Es necesario declarar el MenuItem como final para  
		 */
		final MenuItem opcion_Radio_A = new MenuItem(mOpciones, SWT.RADIO);
		opcion_Radio_A.setText("opcion radio A");
		opcion_Radio_A.setSelection(true);
		opcion_Radio_A.addSelectionListener(new SelectionAdapter() {
			
			@Override
			public void widgetSelected(SelectionEvent e) {
				System.out.println("Option Radio A: " + opcion_Radio_A.getSelection());
			}
		});
		
		
		final MenuItem opcion_Radio_B = new MenuItem(mOpciones, SWT.RADIO);
		opcion_Radio_B.setText("opcion radio B");
		opcion_Radio_B.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				System.out.println(opcion_Radio_B.getSelection());
			}
			
		});
		
		
		
		menuFileItemOpciones.setMenu(mOpciones);

		
		MenuItem menuFileItemSeparator2 = new MenuItem(menu_File, SWT.SEPARATOR);

		
		MenuItem menuFileItemSalir = new MenuItem(menu_File, SWT.PUSH);
		menuFileItemSalir.setText("Salir");
		
		
		/**
		 * Utilizamos un nuevo objeto SelectionAdapter
		 * 
		 * Boton de la derecha sobre el nuevo SelectionAdapter
		 *  Source-> Override/Implment Methods
		 */
		menuFileItemSalir.addSelectionListener(
				new SelectionAdapter() {

					@Override
					public void widgetSelected(SelectionEvent e) {
						//super.widgetSelected(e);
						
						System.out.println("Exit pulsado");
						shell.dispose(); // Salimos de la shell
					}
				});
		
		
		menuItem_File.setMenu(menu_File);
	}
	
	
	
	private void initializeMenu_old()
	{
		//ESTILOS POSIBLES: SWT.DROP_DOWN, SWT.POPUP Y SWT.BAR
		
		
		
		Menu mbar = new Menu(shell, SWT.BAR);
		shell.setMenuBar(mbar);
		
		MenuItem mFile = new MenuItem(mbar, SWT.CASCADE);
		mFile.setText("F&ile");
		
		Menu menuFile = new Menu(shell, SWT.DROP_DOWN);
		
		MenuItem menuFileItemAbrir = new MenuItem(menuFile, SWT.PUSH);
		menuFileItemAbrir.setText("Abrir");
		
		MenuItem menuFileItemGuardar = new MenuItem(menuFile, SWT.PUSH);
		menuFileItemGuardar.setText("Guardar");

		MenuItem menuFileItemSeparator = new MenuItem(menuFile, SWT.SEPARATOR);
		
		MenuItem menuFileItemOpciones = new MenuItem(menuFile, SWT.CASCADE);
		menuFileItemOpciones.setText("Opciones");
		
		Menu mOpciones = new Menu(menuFileItemOpciones);
		
		//Menu menuFileItemOpciones1 = new Menu(menuFileItemOpciones);
		MenuItem opcionA = new MenuItem(mOpciones, SWT.CHECK);
		opcionA.setText("opcion check");
		MenuItem opcionB = new MenuItem(mOpciones, SWT.RADIO);
		opcionB.setText("opcion radio");
		
		menuFileItemOpciones.setMenu(mOpciones);

		MenuItem menuFileItemSeparator2 = new MenuItem(menuFile, SWT.SEPARATOR);

		
		MenuItem menuFileItemSalir = new MenuItem(menuFile, SWT.PUSH);
		menuFileItemSalir.setText("Salir");		
		mFile.setMenu(menuFile);
	}
	
	
	private void initialize()
	{
		display = new Display();		
		shell = new Shell(display, SWT.RESIZE | SWT.MIN | SWT.V_SCROLL);
		shell.setSize(300, 300);
		shell.setText("Pruebas SWT");
		//shell.setImage(new Image(null, "C:/carro.jpg"));		
	}		
	
	
	public void execute()
	{
		shell.open();	
		while (!shell.isDisposed())
		{
			if(!display.readAndDispatch())
				display.sleep();			
		}
		display.dispose();
	}
}
